home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / basic / basfrm13.zip / PC-MAZE.OLD < prev   
Text File  |  1992-07-04  |  7KB  |  200 lines

  1. 10 REM PC-MAZE - MODIFIED FOR EASIER USE ON THE IBM-PC
  2. 20 REM BY JAMES R. DAVIS
  3. 30 KEY OFF
  4. 40 CLEAR,,20000
  5. 50 SCREEN 0:WIDTH 40
  6. 60 CLS : GOTO 450
  7. 70 N = 2:A = H:B = V:FF = 2 ^ (F - 1)
  8. 80 SCREEN 1:COLOR 0,1:CLS
  9. 90 Z = M(A,B) * FF
  10. 100 IF  FN M(Z / 16) = 0 THEN 130
  11. 110 RL =  - 1: GOSUB 390
  12. 120 GOTO 160
  13. 130 W = M(A + S,B - R) * FF
  14. 140 IF FN M(W / 128) = 0 THEN 160
  15. 150 RL = -1: GOSUB 340
  16. 160 IF FN M(Z / 64) = 0 THEN 190
  17. 170 RL = 1: GOSUB 390
  18. 180 GOTO 220
  19. 190 W = M(A - S,B + R) * FF
  20. 200 IF FN M(W / 128) = 0 THEN 220
  21. 210 RL = 1: GOSUB 340
  22. 220 IF FN M(Z / 128) = 1 THEN 260
  23. 230 N = N + 1: IF N > 8 THEN 270
  24. 240 A = A + R:B = B + S: IF B < 2 THEN 270
  25. 250 GOTO 90
  26. 260 GOSUB 280
  27. 270 RETURN
  28. 280 PSET (VX + DX(N),YU(N)),2
  29. 290 LINE (VX + DX(N),YU(N))-(VX + DX(N),YD(N)),2
  30. 300 LINE (VX + DX(N),YD(N))-(VX - DX(N),YD(N)),2
  31. 310 LINE (VX - DX(N),YD(N))-(VX - DX(N),YU(N)),2
  32. 320 LINE (VX - DX(N),YU(N))-(VX + DX(N),YU(N)),2
  33. 330 RETURN
  34. 340 PSET (VX + RL * DX(N - 1),YU(N)),2
  35. 350 LINE (VX + RL * DX(N - 1),YU(N))-(VX + RL * DX(N),YU(N)),2
  36. 360 LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
  37. 370 LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N)),2
  38. 380 RETURN
  39. 390 PSET(VX + RL * DX(N - 1),YU(N - 1)),2
  40. 400 LINE (VX + RL * DX(N-1),YU(N-1))-(VX + RL * DX(N),YU(N)),2
  41. 410 LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
  42. 420 LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N - 1)),2
  43. 430 IF N > 2 THEN LINE (VX + RL * DX(N-1),YD(N-1))-(VX + RL * DX(N - 1),YU(N - 1)),2
  44. 440 RETURN
  45. 450 CLS:COLOR 9,0:LOCATE 6,12: PRINT "YOU ARE THE RAT!": PRINT : LOCATE 4,4: PRINT "A DIFFERENT PERSPECTIVE ON MAZES."
  46. 460 CH = 0
  47. 470 PRINT : LOCATE 1,1: PRINT "FROM THE COMPUSERVE APPLE USER'S GROUP"
  48. 480 LOCATE 2,9: PRINT "PUBLIC ACCESS DATABASE"
  49. 490 LOCATE 17,1: PRINT "----------------------------------------"
  50. 500 LOCATE 18,9: PRINT "USE <- AND -> TO TURN"
  51. 510 PRINT : LOCATE 19,6: PRINT "<SPACE BAR> TO MOVE FORWARD"
  52. 520 PRINT : LOCATE 20,3: PRINT "<ESCAPE> FOR A TOP VIEW (TO CHEAT)"
  53. 530 DEF FN M(X) = INT(X) - INT(INT(X) / 2) * 2
  54. 540 LOCATE 15,1:FX = 36: INPUT "PLEASE ENTER MAZE SIZE (H,V) ";H,V
  55. 550 H = INT(H):V = INT(V)
  56. 560 IF H > 2 AND H < 51 AND V > 2 AND V < 51 THEN 580
  57. 570 PRINT "2<H<51 -- 2<V<51": GOTO 540
  58. 580 N = H * V - 1:H = H + 1:V = V + 1:D = 1
  59. 590 DIM M(52,52),W(400)
  60. 600 FOR J = 1 TO V + 1:M(1,J) = 4:M(H + 1,J) = 1: NEXT J
  61. 610 MX = 278:MY = 190:VX = INT(MX / 2):VY = INT(MY / 2):X = VX
  62. 620 FOR J = 1 TO 8:DX(J) = X:YU(J) = INT(VY - X * VY / VX)
  63. 630 YD(J) =  INT(VY + X * (MY - VY) / VX):X = INT(X * 7 / 10): NEXT J
  64. 640 FOR I = 2 TO H:M(I,V + 1) = 8:M(I,1) = 2
  65. 650 FOR J = 2 TO V:M(I,J) = 15: NEXT J,I
  66. 660 R = INT(H / 2 + 1):S = INT(V / 2 + 1):M(R,S) = 15
  67. 670 COLOR 23
  68. 680 PRINT "            GENERATING MAZE."
  69. 690 COLOR 9
  70. 700 FOR IW = 1 TO N
  71. 710 I = 0
  72. 720 IF M(R - 1,S) < 15 THEN 740
  73. 730 I = I + 1:C(I) = 1
  74. 740 IF M(R,S - 1) < 15 THEN 760
  75. 750 I = I + 1:C(I) = 2
  76. 760 IF M(R + 1,S) < 15 THEN 780
  77. 770 I = I + 1:C(I) = 3
  78. 780 IF M(R,S + 1) < 15 THEN 800
  79. 790 I = I + 1:C(I) = 4
  80. 800 IF I = 0 THEN 990
  81. 810 IF I <> 1 THEN I = INT(RND(TIMER) * I) + 1
  82. 820 ON C(I) GOTO 830,870,910,950
  83. 830 M(R,S) = M(R,S) - FN M(M(R,S))
  84. 840 R = R - 1
  85. 850 M(R,S) = M(R,S) - FN M(M(R,S) / 4) * 4
  86. 860 GOTO 1100
  87. 870 M(R,S) = M(R,S) - FN M(M(R,S) / 8) * 8
  88. 880 S = S - 1
  89. 890 M(R,S) = M(R,S) - FN M(M(R,S) / 2) * 2
  90. 900 GOTO 1100
  91. 910 M(R,S) = M(R,S) - FN M(M(R,S) / 4) * 4
  92. 920 R = R + 1
  93. 930 M(R,S) = M(R,S) - FN M(M(R,S))
  94. 940 GOTO 1100
  95. 950 M(R,S) = M(R,S) - FN M(M(R,S) / 2) * 2
  96. 960 S = S + 1
  97. 970 M(R,S) = M(R,S) - FN M(M(R,S) / 8) * 8
  98. 980 GOTO 1100
  99. 990 IF D = -1 THEN 1030
  100. 1000 IF R <> H THEN 1070
  101. 1010 IF S <> V THEN 1060
  102. 1020 R = 2:S = 2: GOTO 1080
  103. 1030 IF R <> 2 THEN 1070
  104. 1040 IF S <> V THEN 1060
  105. 1050 R = H:S = 2: GOTO 1080
  106. 1060 S = S + 1:D = -D: GOTO 1080
  107. 1070 R = R + D
  108. 1080 IF M(R,S) = 15 THEN 990
  109. 1090 GOTO 710
  110. 1100 NEXT IW
  111. 1110 MH = H:MV = V
  112. 1120 I = INT(RND(TIMER) * (MH - 1)) + 2
  113. 1130 M(I,1) = 0
  114. 1140 M(I,2) = M(I,2) - FN M(M(I,2) / 8) * 8
  115. 1150 H = INT(RND(TIMER) * (MH - 1)) + 2
  116. 1160 H1 = H:V1 = V
  117. 1170 COLOR 23: LOCATE 23,12: PRINT "MAZE COMPLETED.": COLOR 9
  118. 1180 GOTO 1390
  119. 1190 HZ = INT(MX / MH):VZ = INT(MY / MV)
  120. 1200 CH = CH + 1
  121. 1210 SCREEN 1:COLOR 0,1:CLS
  122. 1220 PSET (1 + HZ,1 + VZ),2
  123. 1230 LINE (1 + HZ,1 + VZ)-(1 + HZ,MV * VZ + 1),2
  124. 1240 FOR J = 1 TO MV: FOR I = 2 TO MH
  125. 1250 N = M(I,J):X = I * HZ + 1:Y = J * VZ + 1
  126. 1260 IF FN M(N / 2) = 0 THEN 1290
  127. 1270 PSET (X,Y),2
  128. 1280 LINE (X,Y)-(X - HZ,Y),2
  129. 1290 IF FN M(N / 4) = 0 THEN 1320
  130. 1300 PSET (X,Y),2
  131. 1310 LINE (X,Y)-(X,Y - VZ),2
  132. 1320 NEXT I,J
  133. 1330 X = H * HZ - 1:Y = V * VZ - 1
  134. 1340 PSET (X + 1,Y + 1),2
  135. 1350 LINE (X + 1,Y + 1)-(X - HZ + 2,Y - VZ + 2),2
  136. 1360 PSET (X - HZ + 2,Y + 1),2
  137. 1370 LINE (X - HZ + 2,Y + 1)-(X + 1,Y - VZ + 2),2
  138. 1380 RETURN
  139. 1390 FOR X = 1 TO MH: FOR Y = 1 TO MV
  140. 1400 M(X,Y) = M(X,Y) + M(X,Y) * 16
  141. 1410 NEXT Y,X
  142. 1420 F = INT(RND(TIMER) * 4) + 1
  143. 1430 ON F GOTO 1440,1450,1460,1470
  144. 1440 R = 0:S = -1: GOTO 1480
  145. 1450 R = 1:S = 0: GOTO 1480
  146. 1460 R = 0:S = 1: GOTO 1480
  147. 1470 R =  - 1:S = 0
  148. 1480 GOSUB 70
  149. 1490 DEF SEG : POKE 106,0
  150. 1500 IK$=INKEY$
  151. 1510 'KEY(12) ON
  152. 1520 'KEY(13) ON
  153. 1530 IF IK$=CHR$(0)+CHR$(75) THEN GOSUB 1580
  154. 1540 IF IK$=CHR$(0)+CHR$(77) THEN GOSUB 1600
  155. 1550 IF IK$ = " " THEN 1660
  156. 1560 IF IK$ = CHR$(27) THEN 1770
  157. 1570 GOTO 1500
  158. 1580 F = F - 1: IF F < 1 THEN F = 4
  159. 1590 GOTO 1610
  160. 1600 F = F + 1: IF F > 4 THEN F = 1
  161. 1610 ON F GOTO 1620,1630,1640,1650
  162. 1620 R = 0:S = -1: GOTO 1750
  163. 1630 R = 1:S = 0: GOTO 1750
  164. 1640 R = 0:S = 1: GOTO 1750
  165. 1650 R = -1:S = 0: GOTO 1750
  166. 1660 Z = M(H,V)
  167. 1670 T = Z * 2 ^ (F - 1):T = FN M(T / 128)
  168. 1680 IF T = 0 THEN 1700
  169. 1690 GOTO 1490
  170. 1700 NM = NM + 1: LOCATE 22,24: PRINT "MOVE "NM
  171. 1710 FOR Q=1 TO 500:NEXT
  172. 1720 IF NM < 400 THEN W(NM) = F
  173. 1730 H = H + R:V = V + S
  174. 1740 IF V < 2 THEN 1790
  175. 1750 GOSUB 70
  176. 1760 GOTO 1490
  177. 1770 GOSUB 1190
  178. 1780 GOTO 1490
  179. 1790 CLS : LOCATE 12,5: PRINT "CONGRATS, IT TOOK YOU "NM" STEPS."
  180. 1800 IF CH = 1 THEN LOCATE 14,8: PRINT "(BUT YOU CHEATED ONCE.)
  181. 1810 IF CH > 1 THEN LOCATE 14,6: PRINT " (BUT YOU CHEATED ";CH;" TIMES.)"
  182. 1820 FOR I=1 TO 5000:NEXT
  183. 1830 V = V1:H = H1: GOSUB 1190
  184. 1840 X = INT(H * HZ - HZ / 2) + 1:Y = INT(V * VZ - VZ / 2) + 1
  185. 1850 PSET (X,Y),1
  186. 1860 FOR N = 1 TO NM
  187. 1870 IF N > 400 THEN 1950
  188. 1880 F = W(N)
  189. 1890 IF F = 1 THEN V = V - 1
  190. 1900 IF F = 2 THEN H = H + 1
  191. 1910 IF F = 3 THEN V = V + 1
  192. 1920 IF F = 4 THEN H = H - 1
  193. 1930 LINE (X,Y)-(INT(H * HZ - HZ / 2) + 1,INT(V * VZ - VZ / 2) + 1),1
  194. 1940 X=INT(H * HZ - HZ/2) + 1:Y=INT(V * VZ -VZ/2) + 1
  195. 1950 NEXT N
  196. 1960 LOCATE 1,1:PRINT "PRESS ANY KEY TO CONTINUE"
  197. 1970 IK$=INKEY$
  198. 1980 IF IK$ = "" THEN 1970
  199. 1990 CLEAR:GOTO 40
  200.